package cn.nexd.app.collector.presenter.map;

import java.util.List;

import cn.nexd.app.collector.activity.BaseView;
import cn.nexd.app.collector.model.FloorLayer;
import cn.nexd.app.collector.presenter.BasePresenter;
import cn.nexd.sdk.location.NexdIndoorLocationResult;

/**
 * Created by wangxu on 16/10/26.
 */

public class NexdMapContract {


    public interface View extends BaseView<Presenter> {

        /**
         * 载入地图，UI 操作
         *
         * @param path 目标地图所在的位置
         */
        void loadMap(String path);

        /**
         * 更新定位结果，将定位点显示在地图上
         *
         * @param nexdIndoorLocationResult 定位结果
         */
        void updateLocationPoint(NexdIndoorLocationResult nexdIndoorLocationResult);

        /**
         * 楼层切换
         *
         * @param path  目标楼层路径信息
         * @param witch index
         */
        void changeFloor(String path, int witch);

        /**
         * 提醒用户切换楼层 ， 以 Dialog 的方式提醒用户
         *
         * @param floorName 楼层名称
         * @param floorId   楼层id
         * @param witch     item index
         */
        void notifyChangeFloor(String floorName, final long floorId, int witch);
    }


    public interface Presenter extends BasePresenter {


        /**
         * 初始化切换列表数据
         *
         * @param floorLayers
         * @return
         */
        List<String> initSelectItems(List<FloorLayer> floorLayers);


        /**
         * 载入第一张地图， 只调用一次
         *
         * @param floorId 载入地图的楼层id
         */
        void loadMap(long floorId);

        /**
         * 初始化定位引擎
         *
         * @param locationType     定位类型， WiFi  和 Bluetooth
         * @param locationInterval 定位频率， 1000， 2000， 3000，10000 等级别
         * @param buildingId       定位 Mall
         */
        void initLocation(String locationType, int locationInterval, long buildingId, int buffer);

        /**
         * 楼层切换，反复调用
         *
         * @param floorId 目标楼层Id
         */
        void changeFloor(long floorId);

        /**
         * 开始定位
         *
         * @param autoChange 是否切层定位
         */
        void startLocation(boolean autoChange);

        /**
         * 停止当前定位
         */
        void stopLocation();

        /**
         * 销毁定位实例
         */
        void destroyLocation();
    }
}
